## ANTES DE USAR
# Para criar data/movies.csv
import_data("anne_hathaway") # ou com o ator/atriz que você escolher
Warning: Problem with `mutate()` column `box_office`.
i `box_office = as.numeric(gsub("[$|M]", "", box_office))`.
i NAs introduced by coercion
filmes = read_imported_data("anne_hathaway")
Descrição
Nessa análise, iremos explorar dados acerca das atuações de Anne Jacqueline Hathaway, uma das atrizes norte-americanas mais bem paga do mundo.
A partir das avaliações sobre os filmes de Anne Hathaway, vamos analisar os tipos de filmes nos quais ela atuou.
Avaliação rotten tomatoes
Inicialmente iremos analisar a avaliação da crítica através de dados extraídos do RottenTomatoes
Avaliação no decorrer do tempo
O gráfico abaixo mostra que a maioria dos filmes Anne Hathaway teve menos 60% de boas avaliações, o que significa que são classificados como mancha do tomate verde (exibida para indicar um filme não tão bem avaliado).
p = filmes %>%
ggplot(aes(x = ano, y = avaliacao, label = filme)) +
geom_point(size = 4, color = paleta[2]) +
labs(x = "Ano", y = "Avaliação") +
scale_y_log10()
ggplotly(p)
Possíveis grupos por avaliação
Ao analisar o próximo gráfico, podemos confirmar a impressão anterior.
p = filmes %>%
ggplot(aes(x = "", y = avaliacao, text = paste("Filme:",filme,
"\nAvaliação:",
avaliacao,"m"))) +
geom_jitter(width = .05, alpha = .4, size = 3, color = paleta[5]) +
labs(x = "", y="Avaliação")
ggplotly(p, tooltip="text")
NA
Quantidade de filmes por intervalo de avaliação
No histograma podemos ver que pelo menos 5 filmes tiveram certificado Fresh do Rotten Tomatoes, o que significa que 75% dos comentários são positivos e teve no mínimo 5 avaliações dos principais críticos do Rotten Tomatoes.
filmes %>%
ggplot(aes(x = avaliacao)) +
geom_histogram(binwidth = 10, boundary = 0, fill = paleta[3], color = "black") +
geom_rug(size = .5)
Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
font family not found in Windows font database
Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
font family not found in Windows font database
Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
font family not found in Windows font database
Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
font family not found in Windows font database
Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
font family not found in Windows font database
Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
font family not found in Windows font database
Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
font family not found in Windows font database
Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
font family not found in Windows font database

Sucesso de público (bilheteria)
A seguir, vamos analisar como foram os indicadores de bilheteria dos filmes em que Anne Hathaway participou:
A bilheteria no decorrer dos anos
No gráfico abaixo podemos ver que a maioria dos filmes teve bilheteria abaixo de 100 milhões.
p = filmes %>%
ggplot(aes(x = ano, y = bilheteria, label = filme)) +
geom_point(size = 4, color = paleta[2]) +
labs(x = "Ano", y="Bilheteria") +
scale_y_log10()
ggplotly(p)
Possíveis grupos por bilheteria
Já no próximo gráfico abaixo, podemos ver que apenas um filme teve bilheteria acima de 300 milhões.
p = filmes %>%
ggplot(aes(x = "", y = bilheteria, text = paste("Filme:",filme,
"\nBilheteria:",
bilheteria,"m"))) +
geom_jitter(width = .05, alpha = .4, size = 3, color = paleta[5]) +
labs(x = "", y="Bilheteria")
ggplotly(p, tooltip="text")
Quantidade de filmes por intervalo de arrecadação
No histograma abaixo, é possível concluir também que apenas 2 filmes tiveram arrecadação acima da mediana (150 milhões) e que cerca de 24 filmes tiveram arrecadação igual ou abaixo de 150 milhões.
filmes %>%
ggplot(aes(x = bilheteria)) +
geom_histogram(binwidth = 15, fill = paleta[2], color = "black") +
geom_rug(size = .5)
Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
font family not found in Windows font database
Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
font family not found in Windows font database
Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
font family not found in Windows font database
Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
font family not found in Windows font database
Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
font family not found in Windows font database
Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
font family not found in Windows font database
Warning in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
font family not found in Windows font database
Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, :
font family not found in Windows font database

Agrupamento
Para entender melhor como se classificam os filmes interpretados por Anne Hathaway, vamos dividi-los em grupos através das variáveis avaliação e bilheteria.
Normalização das variáveis
Agora vamos normalizar as estatísticas descritivas abaixo:
normal = filmes %>%
mutate(bilheteria_normalizada = as.vector(scale(log10(bilheteria))),
avaliacao_normalizada = as.vector(scale(avaliacao)))
summary(normal %>% select(bilheteria_normalizada, avaliacao_normalizada))
bilheteria_normalizada avaliacao_normalizada
Min. :-2.1907 Min. :-1.70554
1st Qu.:-0.6515 1st Qu.:-0.87913
Median : 0.3069 Median :-0.09303
Mean : 0.0000 Mean : 0.00000
3rd Qu.: 0.7713 3rd Qu.: 0.84424
Max. : 1.5135 Max. : 1.43885
Agrupamento K-means
Com a execução do Gap Statics é possível perceber que o melhor valor para o K é 5. Logo, assumindo assim esse valor, executamos o algoritmo do k-means.
set.seed(12345)
n_clusters = 4
cluster = normal %>%
select(bilheteria_normalizada, avaliacao_normalizada) %>%
kmeans(centers = n_clusters, nstart = 20)
agrupado = cluster %>%
augment(normal)
p1 = agrupado %>%
ggplot(aes(x = avaliacao, y = bilheteria, color = .cluster, label=filme)) +
geom_point(size = 3)+
scale_y_log10()
ggplotly(p1)
Assim, podemos concluir que existem 4 categorias de grupos de filmes em Anne Hathaway interpretou:
- Baixa avaliação e baixa bilheteria: o grupo contém o filme com bilheteria mais baixa, “The Other Side of Heaven”. Além disso, contém mais 6 filmes (“Serenity”, “One day”, Becoming Jane“,”Ella Enchanted“,”Love & Other Drugs" e “Hoodwinked”.
- Baixa avaliação e alta bilheteria: nessa categoria temos o filme “Bride Wars”, que teve a menor avaliação. Nesse grupo há também os filmes “The Hustle”, “Valentine’s Day”, “The Princess Diaries 2: Royal Engagement” e “Alice Through the Looking Glass”.
- Alta avaliação e baixa bilheteria: esse grupo contém o filme mais bem avaliado da carreira de Anne Hathaway, “Dark Waters”. Contém ainda os filmes “Rachel Getting Married”, “The Dark Knight Rises”, “Colossal” e “Nicholas Nickleby”
- Alta avaliação e alta bilheteria: nesse grupo temos o filme com maior bilheteria estrelado por Anne, “Alice in Wonderland”. Há ainda “The Princess Diaries”, “Get Smart”, “The Intern”, “Les Misérables”, “Ocean’s 8”, “Interstellar”, “The Devil Wears Prada” e “Brokeback Mountain”
LS0tDQp0aXRsZTogIlRpcG9zIGRlIGZpbG1lIGRlIEFubmUgSGF0aGF3YXkiDQphdXRob3I6ICJIZWxlbmEgTXlsZW5hIEMuIERhbnRhcyINCm91dHB1dDoNCiAgICBodG1sX2RvY3VtZW50Og0KICAgICAgICBkZl9wcmludDogcGFnZWQNCiAgICAgICAgdG9jOiB5ZXMNCiAgICAgICAgdG9jX2Zsb2F0OiB5ZXMNCiAgICBodG1sX25vdGVib29rOg0KICAgICAgICB0b2M6IHllcw0KICAgICAgICB0b2NfZmxvYXQ6IHllcw0KdGhlbWU6IHNhbmRzdG9uZQ0KLS0tDQoNCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShoZXJlKQ0KbGlicmFyeShjbHVzdGVyKQ0KbGlicmFyeShwbG90bHkpDQpsaWJyYXJ5KGdnZGVuZHJvKQ0KbGlicmFyeShicm9vbSkNCmxpYnJhcnkoZ2dwdWJyKQ0Kc291cmNlKGhlcmU6OmhlcmUoImNvZGUvbGliLlIiKSkNCnRoZW1lX3NldCh0aGVtZV9yZXBvcnQoKSkNCmtuaXRyOjpvcHRzX2NodW5rJHNldCh0aWR5ID0gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgICAgZmlnLndpZHRoID0gNiwNCiAgICAgICAgICAgICAgICAgICAgICBmaWcuaGVpZ2h0ID0gNSwNCiAgICAgICAgICAgICAgICAgICAgICBlY2hvID0gVFJVRSkNCnBhbGV0YSA9IGMoIiM0MDRFNEQiLA0KICAgICAgICAgICAiIzkyRENFNSIsDQogICAgICAgICAgICIjOTM4QkExIiwNCiAgICAgICAgICAgIiMyRDMxNDIiLA0KICAgICAgICAgICAiI0Y0NzQzQiIpDQpgYGANCg0KYGBge3J9DQojIyBBTlRFUyBERSBVU0FSDQojIFBhcmEgY3JpYXIgZGF0YS9tb3ZpZXMuY3N2DQppbXBvcnRfZGF0YSgiYW5uZV9oYXRoYXdheSIpICMgb3UgY29tIG8gYXRvci9hdHJpeiBxdWUgdm9jw6ogZXNjb2xoZXINCmBgYA0KDQoNCmBgYHtyIHJlYWR9DQpmaWxtZXMgPSByZWFkX2ltcG9ydGVkX2RhdGEoImFubmVfaGF0aGF3YXkiKQ0KYGBgDQoNCiMgRGVzY3Jpw6fDo28NCg0KDQpOZXNzYSBhbsOhbGlzZSwgaXJlbW9zIGV4cGxvcmFyIGRhZG9zIGFjZXJjYSBkYXMgYXR1YcOnw7VlcyBkZSBBbm5lIEphY3F1ZWxpbmUgSGF0aGF3YXksIHVtYSBkYXMgYXRyaXplcyBub3J0ZS1hbWVyaWNhbmFzIG1haXMgYmVtIHBhZ2EgZG8gbXVuZG8uIA0KDQpBIHBhcnRpciBkYXMgYXZhbGlhw6fDtWVzIHNvYnJlIG9zIGZpbG1lcyBkZSBBbm5lIEhhdGhhd2F5LCB2YW1vcyBhbmFsaXNhciBvcyB0aXBvcyBkZSBmaWxtZXMgbm9zIHF1YWlzIGVsYSBhdHVvdS4NCg0KIyBBdmFsaWHDp8OjbyByb3R0ZW4gdG9tYXRvZXMNCg0KSW5pY2lhbG1lbnRlIGlyZW1vcyBhbmFsaXNhciBhIGF2YWxpYcOnw6NvIGRhIGNyw610aWNhIGF0cmF2w6lzIGRlIGRhZG9zIGV4dHJhw61kb3MgZG8gW1JvdHRlblRvbWF0b2VzXShodHRwczovL3d3dy5yb3R0ZW50b21hdG9lcy5jb20vKQ0KDQojIyBBdmFsaWHDp8OjbyBubyBkZWNvcnJlciBkbyB0ZW1wbw0KDQpPIGdyw6FmaWNvIGFiYWl4byBtb3N0cmEgcXVlIGEgbWFpb3JpYSBkb3MgZmlsbWVzIEFubmUgSGF0aGF3YXkgdGV2ZSBtZW5vcyA2MCUgZGUgYm9hcyBhdmFsaWHDp8O1ZXMsIG8gcXVlIHNpZ25pZmljYSBxdWUgc8OjbyBjbGFzc2lmaWNhZG9zIGNvbW8gbWFuY2hhIGRvIHRvbWF0ZSB2ZXJkZSAoZXhpYmlkYSBwYXJhIGluZGljYXIgdW0gZmlsbWUgbsOjbyB0w6NvIGJlbSBhdmFsaWFkbykuDQoNCmBgYHtyfQ0KcCA9IGZpbG1lcyAlPiUgDQogICAgZ2dwbG90KGFlcyh4ID0gYW5vLCB5ID0gYXZhbGlhY2FvLCBsYWJlbCA9IGZpbG1lKSkgKyANCiAgICBnZW9tX3BvaW50KHNpemUgPSA0LCBjb2xvciA9IHBhbGV0YVsyXSkgKyANCiAgICAgICAgbGFicyh4ID0gIkFubyIsIHkgPSAiQXZhbGlhw6fDo28iKSArDQogICAgc2NhbGVfeV9sb2cxMCgpDQoNCmdncGxvdGx5KHApDQpgYGANCg0KIyMgUG9zc8OtdmVpcyBncnVwb3MgcG9yIGF2YWxpYcOnw6NvDQoNCkFvIGFuYWxpc2FyIG8gcHLDs3hpbW8gZ3LDoWZpY28sIHBvZGVtb3MgY29uZmlybWFyIGEgaW1wcmVzc8OjbyBhbnRlcmlvci4NCmBgYHtyfQ0KcCA9IGZpbG1lcyAlPiUgDQogICAgZ2dwbG90KGFlcyh4ID0gIiIsIHkgPSBhdmFsaWFjYW8sIHRleHQgPSBwYXN0ZSgiRmlsbWU6IixmaWxtZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG5BdmFsaWHDp8OjbzoiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWxpYWNhbywibSIpKSkgKyANCiAgICBnZW9tX2ppdHRlcih3aWR0aCA9IC4wNSwgYWxwaGEgPSAuNCwgc2l6ZSA9IDMsIGNvbG9yID0gcGFsZXRhWzVdKSArIA0KICAgIGxhYnMoeCA9ICIiLCB5PSJBdmFsaWHDp8OjbyIpDQpnZ3Bsb3RseShwLCB0b29sdGlwPSJ0ZXh0IikNCg0KYGBgDQojIyBRdWFudGlkYWRlIGRlIGZpbG1lcyBwb3IgaW50ZXJ2YWxvIGRlIGF2YWxpYcOnw6NvDQoNCk5vIGhpc3RvZ3JhbWEgcG9kZW1vcyB2ZXIgcXVlIHBlbG8gbWVub3MgNSBmaWxtZXMgdGl2ZXJhbSBjZXJ0aWZpY2FkbyBGcmVzaCBkbyBSb3R0ZW4gVG9tYXRvZXMsIG8gcXVlIHNpZ25pZmljYSBxdWUgNzUlIGRvcyBjb21lbnTDoXJpb3Mgc8OjbyBwb3NpdGl2b3MgZSB0ZXZlIG5vIG3DrW5pbW8gNSBhdmFsaWHDp8O1ZXMgZG9zIHByaW5jaXBhaXMgY3LDrXRpY29zIGRvIFJvdHRlbiBUb21hdG9lcy4NCg0KYGBge3J9DQpmaWxtZXMgJT4lIA0KICAgIGdncGxvdChhZXMoeCA9IGF2YWxpYWNhbykpICsgDQogICAgZ2VvbV9oaXN0b2dyYW0oYmlud2lkdGggPSAxMCwgYm91bmRhcnkgPSAwLCBmaWxsID0gcGFsZXRhWzNdLCBjb2xvciA9ICJibGFjayIpICsgDQogICAgZ2VvbV9ydWcoc2l6ZSA9IC41KSANCmBgYA0KDQojIFN1Y2Vzc28gZGUgcMO6YmxpY28gKGJpbGhldGVyaWEpDQoNCkEgc2VndWlyLCB2YW1vcyBhbmFsaXNhciBjb21vIGZvcmFtIG9zIGluZGljYWRvcmVzIGRlIGJpbGhldGVyaWEgZG9zIGZpbG1lcyBlbSBxdWUgQW5uZSBIYXRoYXdheSBwYXJ0aWNpcG91Og0KDQojIyBBIGJpbGhldGVyaWEgbm8gZGVjb3JyZXIgZG9zIGFub3MNCg0KTm8gZ3LDoWZpY28gYWJhaXhvIHBvZGVtb3MgdmVyIHF1ZSBhIG1haW9yaWEgZG9zIGZpbG1lcyB0ZXZlIGJpbGhldGVyaWEgYWJhaXhvIGRlIDEwMCBtaWxow7Vlcy4NCg0KYGBge3IsIHdhcm5pbmc9RkFMU0V9DQpwID0gZmlsbWVzICU+JSANCiAgICBnZ3Bsb3QoYWVzKHggPSBhbm8sIHkgPSBiaWxoZXRlcmlhLCBsYWJlbCA9IGZpbG1lKSkgKyANCiAgICBnZW9tX3BvaW50KHNpemUgPSA0LCBjb2xvciA9IHBhbGV0YVsyXSkgKyANCiAgICBsYWJzKHggPSAiQW5vIiwgeT0iQmlsaGV0ZXJpYSIpICsNCiAgICBzY2FsZV95X2xvZzEwKCkNCg0KZ2dwbG90bHkocCkNCmBgYA0KDQojIyBQb3Nzw612ZWlzIGdydXBvcyBwb3IgYmlsaGV0ZXJpYQ0KDQpKw6Egbm8gcHLDs3hpbW8gZ3LDoWZpY28gYWJhaXhvLCBwb2RlbW9zIHZlciBxdWUgYXBlbmFzIHVtIGZpbG1lIHRldmUgYmlsaGV0ZXJpYSBhY2ltYSBkZSAzMDAgbWlsaMO1ZXMuDQoNCmBgYHtyfQ0KcCA9IGZpbG1lcyAlPiUgDQogICAgZ2dwbG90KGFlcyh4ID0gIiIsIHkgPSBiaWxoZXRlcmlhLCB0ZXh0ID0gcGFzdGUoIkZpbG1lOiIsZmlsbWUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuQmlsaGV0ZXJpYToiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbGhldGVyaWEsIm0iKSkpICsgDQogICAgZ2VvbV9qaXR0ZXIod2lkdGggPSAuMDUsIGFscGhhID0gLjQsIHNpemUgPSAzLCBjb2xvciA9IHBhbGV0YVs1XSkgKyANCiAgICBsYWJzKHggPSAiIiwgeT0iQmlsaGV0ZXJpYSIpDQpnZ3Bsb3RseShwLCB0b29sdGlwPSJ0ZXh0IikNCmBgYA0KDQoNCiMjIFF1YW50aWRhZGUgZGUgZmlsbWVzIHBvciBpbnRlcnZhbG8gZGUgYXJyZWNhZGHDp8Ojbw0KDQpObyBoaXN0b2dyYW1hIGFiYWl4bywgw6kgcG9zc8OtdmVsIGNvbmNsdWlyIHRhbWLDqW0gcXVlIGFwZW5hcyAyIGZpbG1lcyB0aXZlcmFtIGFycmVjYWRhw6fDo28gYWNpbWEgZGEgbWVkaWFuYSAoMTUwIG1pbGjDtWVzKSBlIHF1ZSBjZXJjYSBkZSAyNCBmaWxtZXMgdGl2ZXJhbSBhcnJlY2FkYcOnw6NvIGlndWFsIG91IGFiYWl4byBkZSAxNTAgbWlsaMO1ZXMuDQoNCmBgYHtyfQ0KZmlsbWVzICU+JSANCiAgICBnZ3Bsb3QoYWVzKHggPSBiaWxoZXRlcmlhKSkgKyANCiAgICBnZW9tX2hpc3RvZ3JhbShiaW53aWR0aCA9IDE1LCBmaWxsID0gcGFsZXRhWzJdLCBjb2xvciA9ICJibGFjayIpICsgDQogICAgZ2VvbV9ydWcoc2l6ZSA9IC41KSANCmBgYA0KDQojIEFncnVwYW1lbnRvIA0KDQpQYXJhIGVudGVuZGVyIG1lbGhvciBjb21vIHNlIGNsYXNzaWZpY2FtIG9zIGZpbG1lcyBpbnRlcnByZXRhZG9zIHBvciBBbm5lIEhhdGhhd2F5LCB2YW1vcyBkaXZpZGktbG9zIGVtIGdydXBvcyBhdHJhdsOpcyBkYXMgdmFyacOhdmVpcyBhdmFsaWHDp8OjbyBlIGJpbGhldGVyaWEuDQoNCiMjIE5vcm1hbGl6YcOnw6NvIGRhcyB2YXJpw6F2ZWlzDQoNCkFnb3JhIHZhbW9zIG5vcm1hbGl6YXIgYXMgZXN0YXTDrXN0aWNhcyBkZXNjcml0aXZhcyBhYmFpeG86DQoNCmBgYHtyfQ0Kbm9ybWFsID0gZmlsbWVzICU+JSANCiAgICBtdXRhdGUoYmlsaGV0ZXJpYV9ub3JtYWxpemFkYSA9IGFzLnZlY3RvcihzY2FsZShsb2cxMChiaWxoZXRlcmlhKSkpLCANCiAgICAgICAgICAgYXZhbGlhY2FvX25vcm1hbGl6YWRhID0gYXMudmVjdG9yKHNjYWxlKGF2YWxpYWNhbykpKQ0Kc3VtbWFyeShub3JtYWwgJT4lIHNlbGVjdChiaWxoZXRlcmlhX25vcm1hbGl6YWRhLCBhdmFsaWFjYW9fbm9ybWFsaXphZGEpKQ0KYGBgDQojIyBBZ3J1cGFtZW50byBLLW1lYW5zDQoNCkNvbSBhIGV4ZWN1w6fDo28gZG8gR2FwIFN0YXRpY3Mgw6kgcG9zc8OtdmVsIHBlcmNlYmVyIHF1ZSBvIG1lbGhvciB2YWxvciBwYXJhIG8gSyDDqSA1LiBMb2dvLCBhc3N1bWluZG8gYXNzaW0gZXNzZSB2YWxvciwgZXhlY3V0YW1vcyBvIGFsZ29yaXRtbyBkbyBrLW1lYW5zLg0KDQpgYGB7cn0NCnNldC5zZWVkKDEyMzQ1KQ0Kbl9jbHVzdGVycyA9IDQNCmNsdXN0ZXIgPSBub3JtYWwgJT4lIA0KICAgIHNlbGVjdChiaWxoZXRlcmlhX25vcm1hbGl6YWRhLCBhdmFsaWFjYW9fbm9ybWFsaXphZGEpICU+JSANCiAgICBrbWVhbnMoY2VudGVycyA9IG5fY2x1c3RlcnMsIG5zdGFydCA9IDIwKQ0KYWdydXBhZG8gPSBjbHVzdGVyICU+JSANCiAgICBhdWdtZW50KG5vcm1hbCkNCnAxID0gYWdydXBhZG8gJT4lIA0KICAgIGdncGxvdChhZXMoeCA9IGF2YWxpYWNhbywgeSA9IGJpbGhldGVyaWEsIGNvbG9yID0gLmNsdXN0ZXIsIGxhYmVsPWZpbG1lKSkgICsgDQogICAgZ2VvbV9wb2ludChzaXplID0gMykrDQogICAgc2NhbGVfeV9sb2cxMCgpDQoNCmdncGxvdGx5KHAxKQ0KYGBgDQoNCkFzc2ltLCBwb2RlbW9zIGNvbmNsdWlyIHF1ZSBleGlzdGVtIDQgY2F0ZWdvcmlhcyBkZSBncnVwb3MgZGUgZmlsbWVzIGVtIEFubmUgSGF0aGF3YXkgaW50ZXJwcmV0b3U6DQoNCiogQmFpeGEgYXZhbGlhw6fDo28gZSBiYWl4YSBiaWxoZXRlcmlhOiBvIGdydXBvIGNvbnTDqW0gbyBmaWxtZSBjb20gYmlsaGV0ZXJpYSBtYWlzIGJhaXhhLCAiVGhlIE90aGVyIFNpZGUgb2YgSGVhdmVuIi4gQWzDqW0gZGlzc28sIGNvbnTDqW0gbWFpcyA2IGZpbG1lcyAoIlNlcmVuaXR5IiwgIk9uZSBkYXkiLCBCZWNvbWluZyBKYW5lIiwgIkVsbGEgRW5jaGFudGVkIiwgIkxvdmUgJiBPdGhlciBEcnVncyIgZSAiSG9vZHdpbmtlZCIuIA0KKiBCYWl4YSBhdmFsaWHDp8OjbyBlIGFsdGEgYmlsaGV0ZXJpYTogbmVzc2EgY2F0ZWdvcmlhIHRlbW9zIG8gZmlsbWUgIkJyaWRlIFdhcnMiLCBxdWUgdGV2ZSBhIG1lbm9yIGF2YWxpYcOnw6NvLiBOZXNzZSBncnVwbyBow6EgdGFtYsOpbSBvcyBmaWxtZXMgIlRoZSBIdXN0bGUiLCAiVmFsZW50aW5lJ3MgRGF5IiwgIlRoZSBQcmluY2VzcyBEaWFyaWVzIDI6IFJveWFsIEVuZ2FnZW1lbnQiIGUgIkFsaWNlIFRocm91Z2ggdGhlIExvb2tpbmcgR2xhc3MiLg0KKiBBbHRhIGF2YWxpYcOnw6NvIGUgYmFpeGEgYmlsaGV0ZXJpYTogZXNzZSBncnVwbyBjb250w6ltIG8gZmlsbWUgbWFpcyBiZW0gYXZhbGlhZG8gZGEgY2FycmVpcmEgZGUgQW5uZSBIYXRoYXdheSwgIkRhcmsgV2F0ZXJzIi4gQ29udMOpbSBhaW5kYSBvcyBmaWxtZXMgIlJhY2hlbCBHZXR0aW5nIE1hcnJpZWQiLCAiVGhlIERhcmsgS25pZ2h0IFJpc2VzIiwgIkNvbG9zc2FsIiBlICJOaWNob2xhcyBOaWNrbGVieSINCiogQWx0YSBhdmFsaWHDp8OjbyBlIGFsdGEgYmlsaGV0ZXJpYTogbmVzc2UgZ3J1cG8gdGVtb3MgbyBmaWxtZSBjb20gbWFpb3IgYmlsaGV0ZXJpYSBlc3RyZWxhZG8gcG9yIEFubmUsICJBbGljZSBpbiBXb25kZXJsYW5kIi4gSMOhIGFpbmRhICJUaGUgUHJpbmNlc3MgRGlhcmllcyIsICJHZXQgU21hcnQiLCAiVGhlIEludGVybiIsICJMZXMgTWlzw6lyYWJsZXMiLCAiT2NlYW4ncyA4IiwgIkludGVyc3RlbGxhciIsICJUaGUgRGV2aWwgV2VhcnMgUHJhZGEiIGUgIkJyb2tlYmFjayBNb3VudGFpbiINCg==